// 给定一个二叉树，判断其是否是一个有效的二叉搜索树。

// 假设一个二叉搜索树具有如下特征：

// 节点的左子树只包含小于当前节点的数。
// 节点的右子树只包含大于当前节点的数。
// 所有左子树和右子树自身必须也是二叉搜索树。
// 示例 1:

// 来源：力扣（LeetCode）
// 链接：https://leetcode-cn.com/problems/validate-binary-search-tree
// 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

// 看了题解
// 中序遍历，判断是否为升序

// 执行用时：
// 16 ms
// , 在所有 C++ 提交中击败了
// 54.11%
// 的用户
// 内存消耗：
// 21.5 MB
// , 在所有 C++ 提交中击败了
// 5.07%
// 的用户

#include<bits/stdc++.h>
#include<string>
#include<vector>
#include<unordered_map>
#include<set>
using namespace std;


struct TreeNode {
     int val;
     TreeNode *left;
     TreeNode *right;
     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
 
class Solution {
public:
    vector<int> res;
    void mid_search(TreeNode* root){
        if(root == NULL){
            return;
        }
        mid_search(root->left);
        res.push_back(root->val);
        mid_search(root->right);
    }

    bool isValidBST(TreeNode* root) {
        mid_search(root);
        for(int i=0;i<res.size()-1;i++){
            if(res[i]>=res[i+1]){
                return false;
            }
        }
        return true;
    }
};